package com.icinfo.cloud.provider.punish.common.datareport.service;

import com.alibaba.fastjson.JSONObject;
import com.icinfo.cloud.provider.punish.common.datareport.dto.CaseDataReportRequestCommonDto;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.CaseMainInfoVo;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.CasePartiesInfoVo;
import com.icinfo.framework.common.web.Result;

import java.util.List;

/**
 * 描述：案件数据上报接口
 *
 * @author xiangyuyu
 * @date 2022/6/13 17:33
 */
public interface ICaseDataReportService {
    /**
     * 描述：上报数据收集
     *
     * @param caseMainInfoVo   {@link CaseMainInfoVo}
     * @param reportDataType   上报数据类型
     * @param isUpdateReReport 是否更新补推
     * @param partyInfo        {@link CasePartiesInfoVo} 当事人信息
     * @param optType          更新类型
     * @return {@link JSONObject} 上报数据内容
     * @author xiangyuyu
     * @date 2022-06-13 18:52
     */
    JSONObject reportDataCollect(CaseMainInfoVo caseMainInfoVo, String reportDataType, boolean isUpdateReReport, CasePartiesInfoVo partyInfo, String optType);


    /**
     * 描述：单个案件数据上报
     *
     * @param dto          {@link CaseDataReportRequestCommonDto}
     * @param partyInfo    {@link CasePartiesInfoVo} 当事人信息
     * @param caseMainInfo {@link CaseMainInfoVo} 案件主体信息
     * @return {@link Result <String>} 上报结果
     * @author xiangyuyu
     * @date 2022-06-13 18:52
     */
    Result<String> singleCaseReport(CaseDataReportRequestCommonDto dto, CasePartiesInfoVo partyInfo, CaseMainInfoVo caseMainInfo);

    /**
     * 描述：批量案件数据上报
     * @param baseInfoReportFailCaseIdList 上报失败的案件id列表
     * @return {@link Result <String>} 上报失败案件id列表
     * @author xiangyuyu
     * @date 2022-06-13 18:52
     */
    List<String> batchCaseReport(List<String> baseInfoReportFailCaseIdList);

    /**
     * 描述：单个案件重新数据上报（U）
     *
     * @param caseId       案件id
     * @param partyInfo    {@link CasePartiesInfoVo} 当事人信息
     * @param caseMainInfo {@link CaseMainInfoVo} 案件主体信息
     * @return {@link Result <String>} 上报结果
     * @author xiangyuyu
     * @date 2022-06-13 18:52
     */
    Result<String> singleCaseReportAgain(String caseId, CasePartiesInfoVo partyInfo, CaseMainInfoVo caseMainInfo);

    /**
     * 描述：批量案件重新数据上报（U）
     *
     * @return {@link Result <String>} 上报失败案件id列表
     * @author xiangyuyu
     * @date 2022-06-13 18:52
     */
    List<String> batchCaseReportAgain();
}
